#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""
简化版书法评价服务器
专注于快速响应，避免复杂处理
"""

import os
import time
import logging
import json
from datetime import datetime
from flask import Flask, request, jsonify, render_template, send_from_directory
from werkzeug.utils import secure_filename

# 配置日志
logging.basicConfig(
    level=logging.INFO,
    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
    handlers=[
        logging.StreamHandler(),
        logging.FileHandler('simple_server.log')
    ]
)
logger = logging.getLogger(__name__)

# 创建Flask应用
app = Flask(__name__)

# 配置上传文件夹
UPLOAD_FOLDER = 'uploads'
if not os.path.exists(UPLOAD_FOLDER):
    os.makedirs(UPLOAD_FOLDER)
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER

# 允许的文件扩展名
ALLOWED_EXTENSIONS = {'png', 'jpg', 'jpeg', 'gif'}

def allowed_file(filename):
    """检查文件是否有允许的扩展名"""
    return '.' in filename and filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS

@app.route('/')
def index():
    """网站首页"""
    return render_template('index.html', styles=[
        {'id': 'regular', 'name': '楷书'},
        {'id': 'running', 'name': '行书'},
        {'id': 'cursive', 'name': '草书'},
        {'id': 'clerical', 'name': '隶书'},
        {'id': 'seal', 'name': '篆书'}
    ])

@app.route('/evaluate', methods=['POST'])
def evaluate_calligraphy():
    """评估书法作品 - 简化版"""
    try:
        logger.info("接收到评估请求")
        start_time = time.time()
        
        # 获取图片文件
        if 'image' not in request.files:
            logger.error("没有上传文件")
            return jsonify({"error": "没有上传文件"}), 400
            
        image_file = request.files['image']
        if image_file.filename == '':
            logger.error("未选择文件")
            return jsonify({"error": "未选择文件"}), 400
            
        logger.info(f"上传文件名: {image_file.filename}")
        
        # 检查文件类型
        if not allowed_file(image_file.filename):
            logger.error(f"不支持的文件类型: {image_file.filename}")
            return jsonify({"error": "不支持的文件类型，请上传JPG、PNG或GIF图像"}), 400
        
        # 保存上传的图片
        filename = secure_filename(image_file.filename)
        timestamp = datetime.now().strftime('%Y%m%d%H%M%S')
        filename = f"{timestamp}_{filename}"
        image_path = os.path.join(app.config['UPLOAD_FOLDER'], filename)
        image_file.save(image_path)
        logger.info(f"图片已保存至: {image_path}")
        
        # 模拟处理时间
        time.sleep(1)
        
        # 生成模拟评价结果
        style_name = request.form.get('style', 'regular')
        style_names = {
            'regular': '楷书',
            'running': '行书',
            'cursive': '草书',
            'clerical': '隶书',
            'seal': '篆书'
        }
        
        # 模拟评价结果
        evaluation_result = {
            'style_name': style_names.get(style_name, '楷书'),
            'total_score': 85.5,
            'dimension_scores': {
                '笔法': 88.2,
                '结构': 82.7,
                '章法': 85.6
            },
            'feature_scores': {
                'line_width_variance': 0.85,
                'angle_distribution': 0.92,
                'curvature': 0.88,
                'grid_density': 0.83,
                'center_offset': 0.81,
                'component_distribution': 0.84,
                'fourier_descriptors': 0.86,
                'structural_complexity': 0.87,
                'wavelet_energy': 0.82,
                'visual_balance': 0.85,
                'spacing_consistency': 0.84,
                'space_utilization': 0.86,
                'margin_ratio': 0.87
            },
            'overall_comment': '您的书法作品整体表现优秀，笔法流畅有力，结构匀称，章法布局合理。',
            'suggestions': {
                '笔法': {
                    'dimension': '笔法',
                    'score': 88.2,
                    'comment': '笔法流畅有力，转折处理自然。',
                    'suggestion': '可以进一步加强笔画的收笔技巧，提升作品的精细度。'
                },
                '结构': {
                    'dimension': '结构',
                    'score': 82.7,
                    'comment': '字形结构匀称，但个别字的部件比例略有不协调。',
                    'suggestion': '建议注意字的中宫结构，保持各部件之间的平衡。'
                },
                '章法': {
                    'dimension': '章法',
                    'score': 85.6,
                    'comment': '整体布局合理，行距适中。',
                    'suggestion': '可以尝试调整字与字之间的间距，使作品更加和谐。'
                },
                '风格契合度': {
                    'dimension': '风格契合度',
                    'score': 92.0,
                    'comment': '作品风格与所选风格高度契合。',
                    'suggestion': '继续保持当前风格特点，可以参考更多经典范例进一步提升。'
                }
            },
            'evaluation_time': datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
            'style_fitness': 0.92,
            'style_detection': {
                'best_style': style_name,
                'best_style_name': style_names.get(style_name, '楷书'),
                'confidence': 0.85,
                'style_probabilities': {
                    'regular': 0.85 if style_name == 'regular' else 0.05,
                    'running': 0.85 if style_name == 'running' else 0.05,
                    'cursive': 0.85 if style_name == 'cursive' else 0.05,
                    'clerical': 0.85 if style_name == 'clerical' else 0.05,
                    'seal': 0.85 if style_name == 'seal' else 0.05
                }
            },
            'similar_masters': [
                {
                    'name': '王羲之',
                    'similarity': 0.78,
                    'style': '行书',
                    'dynasty': '晋代'
                },
                {
                    'name': '颜真卿',
                    'similarity': 0.72,
                    'style': '楷书',
                    'dynasty': '唐代'
                },
                {
                    'name': '柳公权',
                    'similarity': 0.68,
                    'style': '楷书',
                    'dynasty': '唐代'
                }
            ],
            'processing_time': round(time.time() - start_time, 2)
        }
        
        # 添加文本识别结果
        perform_ocr = request.form.get('perform_ocr', 'true').lower() == 'true'
        if perform_ocr:
            evaluation_result['text_recognition'] = {
                'recognized_text': '天地玄黄，宇宙洪荒。日月盈昃，辰宿列张。',
                'source_info': {
                    'identified': True,
                    'title': '千字文',
                    'author': '周兴嗣',
                    'dynasty': '南北朝',
                    'full_text': '天地玄黄，宇宙洪荒。日月盈昃，辰宿列张。寒来暑往，秋收冬藏...',
                    'match_confidence': '95%'
                }
            }
        
        logger.info(f"评估完成，总分: {evaluation_result['total_score']}")
        return jsonify(evaluation_result)
    except Exception as e:
        logger.error(f"处理请求时出错: {str(e)}")
        import traceback
        logger.error(f"详细错误: {traceback.format_exc()}")
        return jsonify({"error": f"处理请求时出错: {str(e)}"}), 500

@app.route('/uploads/<filename>')
def uploaded_file(filename):
    """提供上传的文件"""
    return send_from_directory(app.config['UPLOAD_FOLDER'], filename)

if __name__ == '__main__':
    print("==================================================")
    print("简化版书法评价系统")
    print("==================================================")
    print("正在启动服务器...")
    print("请在浏览器中访问: http://localhost:8081")
    print("按 Ctrl+C 停止服务器")
    app.run(host='0.0.0.0', port=8081, debug=True) 